package com.hc.demo.service;

import com.hc.demo.domain.Users;
import com.hc.demo.dto.ResultResponse;
import com.hc.demo.exception.TijianException;
import com.hc.demo.exception.TijianExceptionEnum;
import com.hc.demo.mapper.UsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UsersMapper usersMapper;

    /**
     * 登录接口
     * 业务逻辑：controller--》service---》Mapper
     * ①拿着手机号查询数据库看有没有这个用户：没有抛出异常：该手机号尚未注册
     * ②有该用户则进一步核对密码：密码错误，抛出异常，密码错误请重新登录
     * ③前面两关都过了，则用户合法，返回登录成功的信息
     */
    @Override
    public ResultResponse login(Users users){
        ResultResponse resultResponse=null;
        //  int a=12/0;
        Users user=usersMapper.selectByPrimaryKey(users.getUserId());

        if(user==null){
            //抛出异常：该手机号尚未注册
          //  throw new Exception()
            //需要定制异常类型
            throw new TijianException(TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnCode(),TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnMessage());
        }

        if(!user.getPassword().equals(users.getPassword())){
            //抛出异常，密码错误请重新登录
            throw new TijianException(TijianExceptionEnum.PASSWORD_IS_WRONG.getEnCode(),TijianExceptionEnum.PASSWORD_IS_WRONG.getEnMessage());
        }
       // resultResponse=new ResultResponse(200,"ops success");
        user.setPassword("*****");
        resultResponse=new ResultResponse(ResultResponse.SUCCESS_CODE,ResultResponse.SUCCESS_DESC,user);
        return resultResponse;

        // 思考：前面程序一旦抛出异常，代码就不会往下执行了，并且系统生病了，那么还能返回前端一个响应吗？怎么办？
        // SpringBoot用全局异常处理器解决上面的问题：1.处理所有异常  2.能够和前端通信

    }

    /**
     * 注册功能
     * @param users
     * @return
     */
    @Override
    public ResultResponse register(Users users) {

        //没有做非空校验：主要是因为希望前端去做非空校验====》你们能做的话做一下，统一抛出异常  10008 参数错误
//        if(users.getUserId()==null||"".equals(users.getUserId())||users.getPassword()==""||users.getRealName()==""){
//            throw new TijianException()
//        }

        //此处没有做手机号是否已经注册的校验，建议大家把它补充进来  10003
        Users u=usersMapper.selectByPrimaryKey(users.getUserId());
        if(u!=null){
            throw new TijianException(TijianExceptionEnum.MOBILE_ALREADY_REGISTER.getEnCode(),TijianExceptionEnum.MOBILE_ALREADY_REGISTER.getEnMessage());
        }

        usersMapper.insert(users); //落库
        return new ResultResponse(ResultResponse.SUCCESS_CODE,ResultResponse.SUCCESS_DESC);
    }

    @Override
    public ResultResponse validatePhone(String userId) {
      Users users=usersMapper.selectByPrimaryKey(userId);
      if(users==null){
          //throw
          return new ResultResponse(TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnCode(),TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnMessage(),null);
      }else{
          return new ResultResponse(ResultResponse.SUCCESS_CODE,ResultResponse.SUCCESS_DESC,null);
      }

    }

}
